package com.stone.mythread;

import java.util.concurrent.locks.ReentrantLock;

/**
 * 银行有一个账户
 * 有两个储户分别向同一个账户存 3000元，每次存1000，存3次，每次存完打印账户余额
 * 分析：
 * 1、是否是多线程问题？是，两个储户线程
 * 2、是否有共享数据？有，账户（或账户余额）
 * 3、是否线程安全问题？有
 * 4、需要考虑如何解决线程安全问题？三种同步方式
 */
public class AccountTest implements Runnable {

    private int accountMount = 0;

    private ReentrantLock lock = new ReentrantLock(true);
    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {
            lock.lock();
            try {
                accountMount += 1000;
                System.err.println("储户： " + Thread.currentThread().getName() + " 存储余额为：" + accountMount);
            }finally {
                lock.unlock();
            }
        }
    }

    public static void main(String[] args) {
        AccountTest accountTest = new AccountTest();
        Thread consumer1 = new Thread(accountTest);
        Thread consumer2 = new Thread(accountTest);

        consumer1.setName("张三");
        consumer2.setName("李四");

        consumer1.start();
        consumer2.start();
    }
}
